/*
 * 版权所有 ( c ) 联想集团有限公司 2005-2009 保留所有权利。
 * 项目：	Lenovo Push Service
 * 文件名：	RuleSet.java
 * 版本:    1.0
 * 描述：	
 * 作者：	刘兵召
 * 日期：	May 7, 2010 
 * 修改历史：
 * 【时间】		【修改者】	【修改内容】
 */
package com.feng.demo.jakartacommons.digester;

import java.io.File;

import org.apache.commons.digester.Digester;

/**
 * 解析XML数据，并把这些数据映射到前面定义的Java对象中。首先，addObjectCreate()方法建立两个
 * Configuration类实例；接下来，addBeanPropertySetter()方法告诉Digester调用哪个设置方法
 * （setter method）将<title>和<rating>元素的字符数据附加到对象实例上；最后，parse()方法对
 * 文件进行解析和执行确定的行动。最终得到的结果是LibraryDetailsConfiguration类的一个适当配置
 * 的实例。现在，只需要写一个小存根，它将调用那个实例的printLibraryDetails()方法
 * @author Administrator
 *
 */
public class LibraryRuleSet {

	public static LibraryDetailsConfiguration getLibraryDetailsConfig(String libraryConfigFilePath) {
		LibraryDetailsConfiguration libraryDetails = null;
		try {
			Digester digester = new Digester();
			digester.setValidating(false);
			// create an object of the given class,
			// push it to top of Digester object stack
			digester.addObjectCreate("library",LibraryDetailsConfiguration.class);
			digester.addObjectCreate("library/movie",MovieDetails.class);
			// call the setter method of the given bean property on the object
			digester.addBeanPropertySetter("library/movie/title", "title");
			digester.addBeanPropertySetter("library/movie/rating", "rating");
			// pop the object on top of the stack
			digester.addSetNext("library/movie", "setMovie");
			// begin parsing
			File fileObj = new File(libraryConfigFilePath);
			libraryDetails = (LibraryDetailsConfiguration) digester.parse(fileObj);
		} catch (Exception e) {
			System.out.println("Exception in parsing data file: " + e);
			e.printStackTrace();
		}
		return libraryDetails;
	}
}
